home *** CD-ROM | disk | FTP | other *** search
- /*
- * rim.sl
- *
- * Rim lighting surface shader
- *
- * Matt Pharr <mmp@exluna.com>
- *
- */
-
- float bias(varying float value, b) {
- return (b > 0) ? pow(value, log(b) / log(0.5)) : 0;
- }
-
- surface rim(float Ka=1, Kd=1, edgeWidth = .2) {
- normal Nf = normalize(faceforward(N, I));
- vector V = -normalize(I);
-
- illuminance(P, Nf, PI/2) {
- vector Ln = normalize(L);
-
- float lightScale = Ln . Nf;
- float edgeScale = bias(1 - (V . Nf), edgeWidth);
- edgeScale = max(.7, 4*edgeScale);
- Ci += Cl * Kd * lightScale * edgeScale;
- }
- Ci += Ka * ambient();
- Ci *= Cs;
- }
-